/*
 * ItemFile.java
 *
 *  created: 1.9.2011
 *  charset: UTF-8
 *  license: MIT (X11) (See LICENSE file for full license)
 */
package cz.mp.k3bg.core;

import cz.mp.k3bg.log.LoggerManager;
import java.util.logging.Logger;

/**
 * Třída {@code ItemFile} představuje textový souboru s 
 * dalšími informacemi potřebnými při generování souborů 
 * (hlavně souboru {@code opf}).
 * 
 * @author Martin Pokorný
 * @version 0.1
 * @see TextFile
 * @see BookFiles
 * @see OpfGenerator
 */
public class ItemFile extends TextFile implements Comparable, Item {

    private static final boolean DEBUG = false;
    private static final Logger logger =
            LoggerManager.getLogger(ItemFile.class, DEBUG);
    
    protected MimeType mimeType = null;
    
    /** Identifikace v {@code opf} souboru. */
    protected String id = "";
    
    protected String titleInToc = null;
    
    
    // -----
    
    /**
     * 
     * @param path
     * @param charsetName 
     */
    public ItemFile(String path, String charsetName) {
        super(path, charsetName);
    }

    /**
     * Nová instance; jako kódování textu je zvoleno 
     * {@linkplain Application#DEFAULT_CHARSET}.
     * 
     * @param path
     */
    public ItemFile(String path) {
        super(path);
    }

    // -----

    /**
     * Získá dříve určenou identifikaci v {@code opf} souboru.
     * 
     * @return 
     */    
    @Override
    public String getId() {
        return id;
    }

    /**
     * Nastaví Identifikaci v {@code opf} souboru.
     *
     * @param id 
     */
    @Override
    public void setId(String id) {
        if (id == null) {
            throw new IllegalArgumentException("id=null");
        }
        logger.finer("id = " + id);
        this.id = id;
    }

    @Override
    public MimeType getMimeType() {
        return mimeType;
    }

    public void setMimeType(MimeType mimeType) {
        logger.fine("mimeType = " + mimeType.getValue() + "   path = " + path);
        this.mimeType = mimeType;
    }

    public String getTitleInToc() {
        return titleInToc;
    }

    /**
     * 
     * 
     * @param titleInToc 
     */
    public void setTitleInToc(String titleInToc) {
        if (titleInToc == null) {
            throw new IllegalArgumentException("titleInToc = null");
        }
        logger.fine("titleInToc = " + titleInToc);
        this.titleInToc = titleInToc;
    }

    
    /**
     * 
     * @param toDir
     * @return 
     */
    @Override
    public String getRelativePath(String toDir) {
        return super.getRelativePath(toDir);
    }
    
    @Override
    public String getAbsolutePath() {
        return super.getAbsolutePath();
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ItemFile other = (ItemFile) obj;
        if ((this.file == null) ? 
                (other.file != null) : 
                !this.file.getAbsolutePath().equals(
                    other.file.getAbsolutePath())) {
            return false;
        }        
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 11 * hash + 
                (this.file != null ? this.file.getAbsolutePath().hashCode() :0);
        return hash;
    }

    @Override
    public int compareTo(Object obj) {
        final ItemFile other = (ItemFile) obj;
        return this.path.compareTo(other.getPath());
    }
    
}   // ItemFile.java
